perm filename IMPRED.FAI[SS,SYS] blob sn#851604 filedate 1988-01-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	title IMPRED  A B P TEST STRIN I32 O32 CLRST CLRWT STROUT FINO IEPIEN IDPIEN ODPIEN PIA IDONE IEND IMP ISTART LPDL PDL LBUF BUF IMPRED IMPRE0 IMPLOO IREAD CPOPJ IREAD2
C00005 ENDMK
C⊗;
title IMPRED ;⊗ A B P TEST STRIN I32 O32 CLRST CLRWT STROUT FINO IEPIEN IDPIEN ODPIEN PIA IDONE IEND IMP ISTART LPDL PDL LBUF BUF IMPRED IMPRE0 IMPLOO IREAD CPOPJ IREAD2

A←1
B←2

P←17

;CONO BITS
TEST←←	100000	; Enter test mode.  In test mode the output side is
		; tied to the input side of the interface, and READY
		; is brought down
STRIN←←	040000	; Start input, sets stop, clears IEND.
		; Stop means enable wait.  Wait happens after the
		; last bit has come in (if enabled by "stop") to
		; allow the programmer to change data modes before
		; the first bit of the next word comes in
I32←←	020000	; Set 32. bit input mode if IDPIEN set
O32←←	010000	; Set 32. bit output mode if ODPIEN set
CLRST←←	004000	; Clear stop
CLRWT←←	002000	; Clear wait
STROUT←←000200	; Start output
FINO←←	000100	; Finish output (last bit has been sent)
IEPIEN←←000040	; Enable change of IEPIA
IDPIEN←←000020	; Enable change of input byte size and IDPIA, clear
		; IMPERR
ODPIEN←←000010	; Enable change of output byte size and ODPIA
PIA←←	000007	; PI channel (see IEPIEN, IDPIEN, ODPIEN)

;CONI BITS

↑↑IDONE←←020000	; Input done
↑↑IEND←←010000	; Input end (end of message)
IMP←400

ISTART←←STRIN!CLRWT!IEPIEN!IDPIEN

LPDL←←40
PDL:	BLOCK LPDL

LBUF←←100
BUF:	BLOCK LBUF

IMPRED:	RESET
	MOVE P,[IOWD LPDL,PDL]
	EIOTM
	CONO IMP,TEST
	MOVEI A,4
	SLEEP A,		;let the IMP settle
IMPRE0:	EIOTM
	SETZM BUF
	MOVE A,[BUF,,BUF+1]
	BLT A,BUF+LBUF-1	;clear our buffer
	JFCL
	CONO IMP,ISTART
	MOVEI A,1
	SLEEP A,
	MOVE B,[-LBUF,,BUF]
IMPLOO:	PUSHJ P,IREAD		;skip on end of msg
	 AOBJN B,IMPLOO
	LIOTM
	PUSHJ P,DDT↑
	JRST IMPRE0

IREAD:	CONSO IMP,IDONE		;any input data ready?
	JRST IREAD2		;no
	CONSZ IMP,IEND
	AOS (P)			;skip on end of msg
	DATAI IMP,(B)		;yes
	CONO IMP,CLRWT!CLRST
CPOPJ:	POPJ P,

IREAD2:	MOVEI A,0		;brief wait
	SLEEP A,
	JRST IREAD

END IMPRED